//package org.ohos.rajawali3d.examples.recycler;
//
//import com.jcodecraeer.xrecyclerview.XRecyclerView;
//import ohos.agp.render.render3d.ViewHolder;
//import ohos.app.Context;
//
//import java.util.ArrayList;
//import java.util.List;
//
//abstract class ReferencedAdapter<T, V extends ViewHolder, R extends ReferencedAdapter.IndexReference<T>> extends XRecyclerView.RecyclerAdapter<V> {
//
//    private final List<R> referenceList;
//
//    public ReferencedAdapter(Context var1, List<V> var2, int var3) {
//      super( var1, var2, var3);
//      referenceList = new ArrayList<>();
//    }
//
//    protected abstract void onBindViewHolder(V holder, int position, R indexReference);
//
//    protected abstract int getIndexViewType(R indexReference);
//
//    @Override
//    public int getItemComponentType(int position) {
//        R indexReference = referenceList.get(position);
//        return getIndexViewType(indexReference);
//    }
//
//    @Override
//    public void bind(V holder, T var2, int position) {
//        R indexReference = referenceList.get(position);
//        onBindViewHolder(holder, position, indexReference);
//    }
//
//    @Override
//    public int getCount() {
//        return referenceList.size();
//    }
//
//    public void setReferences( List<R> indexReferences) {
//        referenceList.clear();
//        referenceList.addAll(indexReferences);
//    }
//
//    public static abstract class IndexReference<T> {
//
//        final Class<T> type;
//        final T value;
//
//        @SuppressWarnings("unchecked")
//        public IndexReference(T value) {
//            this.value = value;
//            this.type = (Class<T>) value.getClass();
//        }
//
//        public T get() {
//            return value;
//        }
//
//        public Class<T> getType() {
//            return type;
//        }
//
//    }
//
//}
